#pragma once
#include "Types.h"
#include "extern/fastdelegate/FastDelegate.h"



namespace Boon
{
	

class BOON_API IMessengerEvent
{
public:

	/*! \brief		Returns an unique number identifying this MessengerEventData
		\return		const EventType - Number typically created by "Create GUID"-Tool
	*/
	virtual const EventType				GetEventID() const = 0;

	/*! \brief		Returns the time this data has been created
		\return		float - Representing the time
	*/
	virtual const uint_32 				GetTimeStamp() const = 0;

	/*! \brief		Used to serialize for network output
		\param		out - Stream containing data of object
	*/
	virtual void						Serialize( std::ostream& out ) const = 0;

	/*! \brief		Polymorphic function to copy "most derived" class
		\return		Boon::IMessengerEventDataStrong - Shared_pointer as Interface type
	*/
	virtual IMessengerEventStrong		Copy() const = 0;

	/*! \brief		Returns the name of the EventData in a human readable string
		\return		const char* - Stringrepresentation of the object
	*/
	virtual const char*					GetName() const = 0;

	virtual ~IMessengerEvent() { }

};

}
